-- ARGV[1] = voucherId (优惠券/秒杀商品的 ID)
-- ARGV[2] = userId    (用户的 ID)
-- ARGV[3] = 订单id
-- 1. 定义 Redis key
local stockKey = 'seckill:stock:' .. ARGV[1] -- 库存的 key
local orderKey = 'seckill:order:' .. ARGV[1]  -- 订单的 key

-- 2. 业务逻辑
-- 2.1 判断库存是否充足
if tonumber(redis.call('GET', stockKey)) <= 0 then
    return 1  -- 库存不足
end

-- 2.2 判断用户是否下单（防止重复下单）
if redis.call('SISMEMBER', orderKey, ARGV[2]) == 1 then
    return 2  -- 用户已抢过
end

-- 2.3 扣库存
redis.call('DECR', stockKey)

-- 2.4 记录用户ID，标记用户已抢购（保存用户ID到订单的set集合）
redis.call('SADD', orderKey, ARGV[2])


-- 2.5 添加到消息队列中
redis.call('xadd', 'stream.orders', '*', 'userId', ARGV[2], 'voucherId', ARGV[1], 'id', ARGV[3])
-- 3. 返回 0 表示抢购成功
return 0
